"""
python2.0中
    range(10) 返回存储0~9的列表，内存开销大
    xrange(10) 存储生成返回0~9的方法而不存储具体数值效率高

python3.0中
    range(10)相当于2.0的xrange，减少了返回列表的内存开销，使用迭代器实现
"""


class Fibonacci(object):
    """使用迭代计算斐波那契"""

    def __init__(self, count):
        self.count = count
        self.index = 0
        self.a = 0
        self.b = 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.index <= self.count:
            ret = self.a
            self.a, self.b = (self.b, self.a + self.b)
            self.index += 1
            return ret
        else:
            raise StopIteration


fib = Fibonacci(30)
for num in fib:
    print(num)
